import axios from 'axios'
import { Message } from '@arco-design/web-vue'
import { useUserStore } from '@/stores/user'

// 创建axios实例
const request = axios.create({
  baseURL: '/api',
  timeout: 10000
})

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    const userStore = useUserStore()
    if (userStore.token) {
      config.headers.Authorization = `Bearer ${userStore.token}`
    }
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    const { data } = response
    
    // 统一响应格式: { code: number, data: any, msg: string }
    if (data && typeof data.code !== 'undefined') {
      // code 为 200 表示成功
      if (data.code === 200) {
        // 成功时直接返回 data 字段
        return data.data
      } else {
        // 失败时显示错误信息并抛出错误
        Message.error(data.msg || '请求失败')
        return Promise.reject(new Error(data.msg || '请求失败'))
      }
    }
    
    // 兼容旧格式
    return data
  },
  (error) => {
    const { response } = error
    
    if (response) {
      const { status, data } = response
      
      // 优先显示后端返回的错误信息
      if (data && data.msg) {
        Message.error(data.msg)
      } else {
        // 根据状态码显示默认错误信息
        switch (status) {
          case 401:
            // 未授权，清除token并跳转到登录页
            const userStore = useUserStore()
            userStore.logoutUser()
            Message.error('登录已过期，请重新登录')
            break
          case 403:
            Message.error('没有权限访问该资源')
            break
          case 404:
            Message.error('请求的资源不存在')
            break
          case 500:
            Message.error('服务器内部错误')
            break
          default:
            Message.error('请求失败')
        }
      }
    } else {
      Message.error('网络连接失败，请检查网络')
    }
    
    return Promise.reject(error)
  }
)

export default request
